package com.dd.census.tools;

import java.util.HashMap;
import java.util.Map;

import org.springframework.http.HttpStatus;

import com.dd.census.entity.SysUser;

public class TokenHelper {

	/** 以Token为Key保存登录用户信息 */
	private static Map<String, SysUser> tokenMap = new HashMap<>();

	/** 以IMei和工号为Key，管理Token */
	private static Map<String, String> keyMap = new HashMap<>();

	/**
	 * 生成Token信息
	 * 
	 * @param user 登录用户
	 * @return token
	 */
	public static String generateToken(SysUser user) {

		// token管理Key
		String key = user.getAccount();

		// 存在Token时，删除Token
		String token = keyMap.get(key);
		if (null != token) {
			tokenMap.remove(token);
		}

		// 创建Token
		token = RandomUtil.getRandom(32);

		// 保存Token信息
		keyMap.put(key, token);
		tokenMap.put(token, user);

		return token;
	}

	/**
	 * 验证认证Token是否与保存信息相符
	 * 
	 * @param bean 登录信息
	 * @param user 员工信息
	 * @param token token
	 * 
	 * @return 管理Key
	 * @throws AppException 
	 */
	public static String validate(SysUser user, String token) throws SysException {

		// token管理Key
		String key = user.getAccount();

		// 比较认证Token和保存的Token是否一致
		String target = keyMap.get(key);
		if ( !token.equals(target) ) {
			throw new SysException(HttpStatus.FORBIDDEN);
		}
		return key;
	}

//	/**
//	 * 创建token管理Key
//	 * 
//	 * @param bean 登录信息
//	 * @param user 员工信息
//	 * @return token管理Key
//	 */
//	private static String buildKey(User user) {
//		
//		return user.getAccount()+user.getPassword();
//	}

	/**
	 * 删除token
	 * 
	 * @param key token管理Key
	 */
	public static void delete(String key) {
		tokenMap.remove( keyMap.remove(key) );
	}

	/**
	 * 取得用户登录信息
	 * 
	 * @param token 登录Token
	 * @return 登录用户信息
	 */
	public static SysUser getLoginUser(String token) {
		return tokenMap.get(token);
	}

	/**
	 * 判断Token是否存在
	 * 
	 * @param token token
	 * @return true:存在，false:不存在
	 */
	public static boolean isVaild(String token) {
		return tokenMap.containsKey(token);
	}
}
